package com.hkd.system.controller.exam;

import com.hkd.common.core.domain.R;
import com.hkd.common.core.domain.TableDataInfo;
import com.hkd.system.domain.exam.dto.ExamAddDTO;
import com.hkd.system.domain.exam.dto.ExamEditDTO;
import com.hkd.system.domain.exam.dto.ExamQueryDTO;
import com.hkd.system.domain.exam.dto.ExamQuestAddDTO;
import com.hkd.system.service.exam.IExamService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/exam")
@Tag(name = "竞赛管理")
public class ExamController {
    @Autowired
    private IExamService examService;

    /**
     * 竞赛列表
     * @param examQueryDto 接收到前段的参数
     * @return 返回竞赛列表
     */
    @GetMapping("/list")
    public TableDataInfo list(ExamQueryDTO examQueryDto){
        return examService.list(examQueryDto);
    }

    /**
     * 添加竞赛
     * @param examAddDTO 接收到前段的参数
     * @return 返回添加结果Id String (Long会裁断 雪花算法)
     */
    @PostMapping("/add")
    public R add(@RequestBody ExamAddDTO examAddDTO){
        return examService.add(examAddDTO);
    }

    /**
     * 关联题目
     * @param examQuestAddDTO 接收到前段的参数
     * @return 返回添加结果 boolean
     */
    @PostMapping("/question/add")
    public R questionAdd(@RequestBody ExamQuestAddDTO examQuestAddDTO){
        return examService.questionAdd(examQuestAddDTO);
    }

    /**
     * 查看竞赛详情
     * @param examId 接收到前段的参数
     * @return 返回竞赛详情
     */
    @GetMapping("/detail")
    public R detail(Long examId){
        return examService.detail(examId);
    }

    /**
     * 编辑竞赛
     * @param examEditDTO 接收到前段的参数
     * @return 返回编辑结果 boolean
     */
    @PutMapping("/edit")
    public R edit(@RequestBody ExamEditDTO examEditDTO){
        return examService.edit(examEditDTO);
    }

    /**
     * 删除竞赛题目
     * @param examId
     * @return
     */
    @DeleteMapping("/question/delete")
    public R questionDelete(Long examId,Long questionId){
        return examService.questionDelete(examId,questionId);
    }

    /**
     * 删除竞赛
     * @param examId 接收到前段的参数
     * @return 返回删除结果
     */
    @DeleteMapping("/delete")
    public R delete(Long examId){
        return examService.delete(examId);
    }

    /**
     * 发布竞赛
     * @param examId 接收到前段的参数
     * @return 返回发布结果
     */
    @PutMapping("/publish")
    public R publish(Long examId){
        return examService.publish(examId);
    }

    /**
     * 取消发布竞赛
     * @param examId 接收到前段的参数
     * @return  返回取消发布结果
     */
    @PutMapping("/cancelPublish")
    public R cancelPublish(Long examId){
        return examService.cancelPublish(examId);
    }

}
